// Object.assign 是浅拷贝适用于基础类型
// let target={
//     a:{
//         b:{
//             c:1
//         },
//         e:4,
//         f:5,
//         g:6
//     }
// }

// let source={
//     a:{
//         b:{
//             c:2
//         },
//         e:1,
//         f:1,
//     }
// }
// Object.assign(target,source)
// console.log(target);//a:{b: {c: 2},e: 1,f: 1} 自己本身的g:6没有拷贝上
// let str=JSON.stringify(target)
// let str2=JSON.parse(str)
// console.log(str2,target);




// 深拷贝

// 检查类型的方法
// let checkType = data => {

//     return Object.prototype.toString.call(data).slice(8, -1)
// }
// // checkType()

// let deepClone = target => {
//     let targetType = checkType(target)
//     let result
//     if (targetType === 'Object') {
//         result = {}
//     } else if (targetType == "Array") {
//         result = []
//     } else {
//         return target
//     }
//     for (let i in target) {
//         let value=target[i]
//         let valueType=checkType(value)
//         if (valueType==='Object' ||valueType==='Array') {
//            result[i] = deepClone(value)
//         }else{
//         result[i]=value
//         }
//     }
//     return result
// }

// let arr1=[1,2,{age:16}]
// let arr2=deepClone(arr1)
// arr2[2].age=24
// console.log(arr1);